/*
windows版本
下载redis，解压后，在环境变量中配置路径
    然后可以再cmd中使用 redis-cli打开可执行redis命令的窗口

    命令 (大小写都行)
    String ：
        set key value [NX|XX] [EX seconds]  添加  NX:是已存在就设置失效(键不存在才能设置值)， XX：不存在就设置失效(键存在才能设置值)   EX：设置过期时间 单位秒
        get key     获取 
        del key     删除
        del key1 key2  删除多个
    
    SET： （集合结构）  (无序不重复)
        sadd key member | [member ...]    添加
        smembers key    获取
        sismember key member      检测数据是否存在 （1表示存在，0表示不存在）
        srem key member | [memver ...]   删多个

    HASH： 哈希结构
        hset key field value | [field value]  添加 （field value: 字段 值 ） 类似map  field相同时会覆盖
        hget key field | [field ...]       获取 得到 value
        hgetall key           获取key中所有的键、值
        hdel key field        删除
        hexists key field     检查某字段是否存在
        hkeys key            获取所有的键
        hvals  key           获取所有的值
        hlen  key            获取总数量
        
    LIST: 列表
        添加元素：
        lpush key element1 element2 ..  左插入  相当于每次往头部插入，看起来像倒序
        rpush key element1 element2 ..  右插入  相当于每次往尾部插入，看起来像正序
        
        获取元素：
        lrange key start stop  (start 起始索引  stop结束索引   都是从 0 开始， 负数就是倒数的 )
            lrange key 0 -1  获取全部

        修改元素
        lset key index newvalue  (index表示索引)  修改指定索引位置的元素的值

        删除元素
        lrem key count value   (count表示数量)  删除指定数量的指导值元素
        lpop key        左删除  删除左边第一个元素并返回（从头部删除）
        rpop key        右删除  删除右边第一个元素并返回（从尾部删除）

        获取长度、总个数
        llen key
*/

/*
    redis的发布订阅   消息通讯 实时的
        subscribe channel       从什么频道订阅消息（订阅后停住，等待发布者发布消息）
        publish channel         发布消息（一发布，订阅者就能收到）

    redis事务   缺点：不能回滚
        multi 开启事务
        discard 关闭事务
        exec 执行事务

        开启事务后，输入redis命令，会被存到队列中，直到使用exec执行，才会将队列中的所有命令全部执行，
        此过程中如果出错，事务会继续执行，且不能回滚已执行的命令
*/
/*
redis持久化  看redis的配置文件里，可以作修改 conf
    两个方法
        RDB (快照的方式)  多用于固定时间的备份
        AOF (将写的操作存到文件中) 修改配置文件 appendonly 为 yes

redis也是高可用的，它遵循主从复制
*/

/*
ioredis  是一个强大且流行的 Node.js 库，用于与 Redis 进行交互
    有 高性能、支持Promises 和 async/await  等等特点
    
    安装引入，然后连接
    node-redis目录下演示
*/






/*
lua脚本语言
    官网下载编译好的二进制的压缩包，解压后，配置下环境变量，可以再cmd中使用

    运行.lua文件
    lua54 index.lua

    数据类型
        nil：表示无效值或缺失值。
        boolean：表示布尔值，可以是 true 或 false。
        number：表示数字，包括整数和浮点数。
        string：表示字符串，由字符序列组成。
        table：表示表，一种关联数组，用于存储和组织数据。
        function：表示函数，用于封装可执行的代码块。
        userdata：表示用户自定义数据类型，通常与C语言库交互使用。
        thread：表示协程，用于实现多线程编程。
        metatable：表示元表，用于定义表的行为。

    lua的是一种脚本语言，可以嵌入到redis中
        lua + redis 做限流阀

        redis-lua目录下演示

*/